A modern computer system may be divided roughly into three conceptual elements: the hardware, the operating system, and the application programs. The hardware, (i.e., central processing unit (CPU), memory, persistent storage devices, and input/output (I/O) devices) provides the basic computing resources. The application programs (i.e., compilers, database systems, software, and business programs) define the ways in which these resources are used to solve the computing problems of the users. The users may include people, machines, and other computers that use the application programs, which in turn employ the hardware to solve numerous types of problems.
An operating system (“OS”) is a program that acts as an intermediary between the application program layer and the computer hardware. As such, the operating system is configured to provide an environment in which a user can execute application programs in a convenient and efficient manner. Specifically, the operating system is tasked with managing hardware resources (i.e., CPU time, memory space, persistent storage space, I/O devices, etc.) by allocating them to specific programs and users as necessary. Because there may be many, possibly conflicting, requests for hardware resources, the operating system must decide which requests are allocated hardware resources to operate the computer system efficiently and fairly.
Different mechanisms are available to the operating system to facilitate hardware resource management. In processing a request from a process executing either within the operating system or within a user application program, execution threads are used to multi-task and therefore make efficient use of available hardware resources. Further, a group of common hardware resources may be shared by a group of active threads.
The dispatching of threads to hardware resources by the operating system, as described above, does have a power management impact on a computer system. For example, a hardware resource requires power for that hardware resource to be of any use to a thread that has been dispatched for execution on that hardware resource. As such, an idle hardware resource requires a power adjustment if and when a thread has been dispatched to the hardware resource for execution. Likewise, when the thread has completed executing on an active hardware resource, the hardware resource may require less power if no other threads have been subsequently dispatched to the hardware resource.
In view of this, power management for hardware resources is yet another mechanism aimed to promote efficiency in a computer system. For example, Energy Star (“E*”) power requirements require system power consumption to be lowered to 15% of the normal operating power consumption level when the system is idle. Therefore, to conserve power, the operating system turns off (or lowers the operating frequencies of) idle hardware resources. In implementing a power management scheme, computer systems have typically polled its hardware resources for utilization data in periodic time increments, thereby allowing for a power management adjustment to take effect when instances of over-utilization or under-utilization are detected.